public class TabelaIgnorancia {
	
	private static TabelaIgnorancia instanceOfTabela;
	
	private TabelaIgnorancia() {
		vetorDeCodificados = new int[256];
	}
	
	public static TabelaIgnorancia getInstance() {
		if(instanceOfTabela == null) {
			instanceOfTabela = new TabelaIgnorancia();
		}
		return instanceOfTabela;
	}
	
	public int[] probSimbolo(char simbolo) {
		
		int[] dados = new int[3];
		int valorSimbolo = simbolo;
		
		dados[0] = valorSimbolo - vetorDeCodificados[valorSimbolo];
		dados[1] = valorSimbolo - vetorDeCodificados[valorSimbolo] + 1;
		dados[2] = TOTAL_DE_SIMBOLOS - this.totalCodificados;
			
		this.totalCodificados++;
		this.incrementaCodificados(valorSimbolo);
		
		//System.out.println("IGNORANCIA LOW: " + dados[0] + " HIGH: " + dados[1] + " TOTAL: " + dados[2]);
		return dados;
	}
	
	private void incrementaCodificados(int inicio) {
		
		for(int i = inicio; i < TOTAL_DE_SIMBOLOS; i++){
			vetorDeCodificados[i]++;
		}
	}
	
	
	private int totalCodificados = 0;	
	private int[] vetorDeCodificados;
	private static int TOTAL_DE_SIMBOLOS = 256;
}
